package com.cyy;

import java.util.List;
import java.util.Vector;

/**
 * 普通栈
 * @author 会玩的洋洋
 * @since 2022-02-22
 * @param <E>
 *
 * 栈是一种特殊的线性表，只能在一端操作
 *
 * 在栈中添加元素的操作，一般叫push，入栈
 *
 * 在栈中删除元素的操作，一般叫pop，出栈（只能移除栈顶元素，也叫做：弹出栈顶元素）
 *
 * 后进先出的原则，Last In First Out LIFO
 */
public class Stack<E> {
    /**
     * JDK 底层是继承的 Vector， 因此我们也可以使用Vector进行操作
     * 其实也可以采用 ArrayList 或着 LinkedList
     * 由于 Stack 只在头部进行操作 因此用 ArrayList 比 LinkedList 要好
     */
    private List<E> vector = new Vector<>();

    /**
     * 元素个数
     * @return int
     */
    public int size() {
        return vector.size();
    }

    /**
     * 判断是否为空
     * @return boolean
     */
    public boolean isEmpty() {
        return vector.isEmpty();
    }

    /**
     * 入栈
     * @param element 入栈元素
     */
    public void push(E element) {
        vector.add(element);
    }

    /**
     * 出栈
     * @return E
     */
    public E pop() {
        return vector.remove(size() - 1);
    }

    /**
     * 查看栈顶元素
     * @return E
     */
    public E top() {
        return vector.get(size() - 1);
    }

    /**
     * 清空元素
     */
    public void clear() {
        vector.clear();
    }
}
